<?php

namespace app\middleware;

use app\system\service\Token;
use app\system\service\TokenService;
use think\Exception;
use think\facade\Request;

class Check
{
    /**
     * 处理请求中的 token 验证
     *
     * @param $request
     * @param \Closure $next
     * @return mixed
     */
    public function handle($request, \Closure $next)
    {
        try {
            // 从请求头获取 token
            $token = Request::header('authorization', false);
            if (!$token) {
                return (['success' => false, 'info' => 'Token不存在!']);
            }
            // 验证 token
            $userinfo = (new TokenService())->checkToken($token);

            if (!$userinfo['success']) {
                return (['success' => false, 'info' => 'Token验证失败!']);
            }
            // 将用户信息挂载到请求对象上
            $request->userInfo = $userinfo['data'];
        } catch (Exception $err) {
            // 捕获到异常时，根据异常信息返回错误响应
            return json([
                'success' => false, // 表示处理失败
                'msg' => $err->getMessage()
            ]);
        }
        // 如果没有异常发生，继续请求处理
        return $next($request);
    }
}
